package com.yumeng.framework.auth.service;

import com.yumeng.framework.auth.bean.LoginTokenInfo;
import com.yumeng.framework.auth.bean.TokenInfo;
import com.yumeng.framework.auth.bean.VerifyLoginInfo;
import com.yumeng.common.auth.BaseAuthInfo;
import com.yumeng.framework.auth.data.enums.JwtType;
import com.yumeng.framework.auth.data.enums.LogoutType;
import jakarta.servlet.http.HttpServletResponse;

import java.util.Map;

/**
 * token处理接口
 */
public interface TokenService {

    /**
     * 生成token信息（用于登录）
     * @param authInfo
     * @param jwtType
     * @param loginInfo
     * @return
     */
    LoginTokenInfo generateTokenForLogin(BaseAuthInfo authInfo, JwtType jwtType, Map<String, Object> loginInfo);

    /**
     * 清除token（用于注销）
     * @param type
     */
    void clearTokenForLogout(LogoutType type);

    /**
     * tokenInfo预验证
     *
     * @param tokenInfo
     * @param response
     * @return
     */
    VerifyLoginInfo preVerifyTokenInfo(TokenInfo tokenInfo, HttpServletResponse response);

    /**
     * 刷新token
     * @param oldTokenInfo
     * @param info
     * @param response
     */
    void refreshToken(TokenInfo oldTokenInfo, VerifyLoginInfo info, HttpServletResponse response);

    /**
     * 根据token，获取AuthInfo
     *
     * @param token
     * @return
     */
    BaseAuthInfo getAuthInfoByToken(String token, boolean strict);

}
